<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Closed-loop controller</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Closed-loop_controller"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Closed-loop_controller rootpage-Closed-loop_controller skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Closed-loop controller</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><br>
A <b>closed-loop controller</b> or <b>feedback controller</b> is a <a href="Control_loop" title="Control loop">control loop</a> which incorporates <a href="Feedback" title="Feedback">feedback</a>, in contrast to an <i><a href="Open-loop_controller" title="Open-loop controller">open-loop controller</a></i> or <i>non-feedback controller</i>.
A closed-loop controller uses feedback to control <a href="State_(controls)" class="mw-redirect" title="State (controls)">states</a> or <a href="Negative_feedback#Overview" title="Negative feedback">outputs</a> of a <a href="Dynamical_system" title="Dynamical system">dynamical system</a>. Its name comes from the information path in the system: process inputs (e.g., <a href="Voltage" title="Voltage">voltage</a> applied to an <a href="Electric_motor" title="Electric motor">electric motor</a>) have an effect on the process outputs (e.g., speed or torque of the motor), which is measured with <a href="Sensor" title="Sensor">sensors</a> and processed by the controller; the result (the control signal) is "fed back" as input to the process, closing the loop.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>In the case of linear <a href="Feedback" title="Feedback">feedback</a> systems, a <a href="Control_loop" title="Control loop">control loop</a> including <a href="Sensor" title="Sensor">sensors</a>, control algorithms, and actuators is arranged in an attempt to regulate a variable at a <a href="Setpoint_(control_system)" title="Setpoint (control system)">setpoint</a> (SP). An everyday example is the <a href="Cruise_control" title="Cruise control">cruise control</a> on a road vehicle; where external influences such as hills would cause speed changes, and the driver has the ability to alter the desired set speed. The <a href="PID_algorithm" class="mw-redirect" title="PID algorithm">PID algorithm</a> in the controller restores the actual speed to the desired speed in an optimum way, with minimal delay or <a href="Overshoot_(signal)" title="Overshoot (signal)">overshoot</a>, by controlling the power output of the vehicle's engine.
Control systems that include some sensing of the results they are trying to achieve are making use of feedback and can adapt to varying circumstances to some extent. <a href="Open-loop_controller" title="Open-loop controller">Open-loop control systems</a> do not make use of feedback, and run only in pre-arranged ways.
</p><p>Closed-loop controllers have the following advantages over open-loop controllers:
</p>
<ul><li>disturbance rejection (such as hills in the cruise control example above)</li>
<li>guaranteed performance even with <a href="Mathematical_model" title="Mathematical model">model</a> uncertainties, when the model structure does not match perfectly the real process and the model parameters are not exact</li>
<li><a href="Instability" title="Instability">unstable</a> processes can be stabilized</li>
<li>reduced sensitivity to parameter variations</li>
<li>improved reference tracking performance</li>
<li>improved rectification of random fluctuations<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></li></ul>
<p>In some systems, closed-loop and open-loop control are used simultaneously. In such systems, the open-loop control is termed <i><a href="Feed_forward_(control)" title="Feed forward (control)">feedforward</a></i> and serves to further improve reference tracking performance.
</p><p>A common closed-loop controller architecture is the <a href="PID_controller" class="mw-redirect" title="PID controller">PID controller</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Open-loop_and_closed-loop">Open-loop and closed-loop</h2></div>
<div class="excerpt-block"><style data-mw-deduplicate="TemplateStyles:r1066933788">
/* start https://en.wikipedia.org/ */
.mw-parser-output .excerpt-hat .mw-editsection-like{font-style:normal}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable dablink excerpt-hat selfref">This section is an excerpt from <a href="Control_loop#Open-loop_and_closed-loop" title="Control loop">Control loop § Open-loop and closed-loop</a>.<span class="mw-editsection-like "><span class="mw-editsection-bracket">[</span><a class="external text external" href="https://en.wikipedia.org/w/index.php?title=Control_loop&action=edit#Open-loop_and_closed-loop">edit</a><span class="mw-editsection-bracket">]</span></span></div><div class="excerpt">
<p>Fundamentally, there are two types of control loop: <i><a href="Open-loop_control" class="mw-redirect" title="Open-loop control">open-loop control</a></i> (feedforward), and <i><a href="Closed-loop_control" class="mw-redirect" title="Closed-loop control">closed-loop control</a></i> (feedback).
</p>
<ul><li>In open-loop control, the control action from the controller is independent of the "process output" (or "controlled process variable"). A good example of this is a central heating boiler controlled only by a timer, so that heat is applied for a constant time, regardless of the temperature of the building. The control action is the switching on/off of the boiler, but the controlled variable should be the building temperature, but is not because this is open-loop control of the boiler, which does not give closed-loop control of the temperature.</li>
<li>In closed loop control, the control action from the controller is dependent on the process output. In the case of the boiler analogy, this would include a thermostat to monitor the building temperature, and thereby feed back a signal to ensure the controller maintains the building at the temperature set on the thermostat. A closed loop controller therefore has a feedback loop which ensures the controller exerts a control action to give a process output the same as the "reference input" or "set point". For this reason, closed loop controllers are also called feedback controllers.<sup id="cite_ref-Control_loop_auto_3-0" class="reference"><a href="#cite_note-Control_loop_auto-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></li></ul>
<p>The definition of a closed loop control system according to the <a href="British_Standards_Institution" class="mw-redirect" title="British Standards Institution">British Standards Institution</a> is "a control system possessing monitoring feedback, the deviation signal formed as a result of this feedback being used to control the action of a final control element in such a way as to tend to reduce the deviation to zero."<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
Likewise; "A <i>Feedback Control System</i> is a system which tends to maintain a prescribed relationship of one system variable to another by comparing functions of these variables and using the difference as a means of control."<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></div></div>
<div class="mw-heading mw-heading2"><h2 id="Closed-loop_transfer_function">Closed-loop transfer function</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Closed-loop_transfer_function" title="Closed-loop transfer function">Closed-loop transfer function</a></div>
<p>The output of the system <i>y</i>(<i>t</i>) is fed back through a sensor measurement <i>F</i> to a comparison with the reference value <i>r</i>(<i>t</i>). The controller <i>C</i> then takes the error <i>e</i> (difference) between the reference and the output to change the inputs <i>u</i> to the system under control <i>P</i>. This is shown in the figure. This kind of controller is a closed-loop controller or feedback controller.
</p><p>This is called a single-input-single-output (<i>SISO</i>) control system; <i>MIMO</i> (i.e., Multi-Input-Multi-Output) systems, with more than one input/output, are common. In such cases variables are represented through <a href="Coordinate_vector" title="Coordinate vector">vectors</a> instead of simple <a href="Scalar_(mathematics)" title="Scalar (mathematics)">scalar</a> values. For some <a href="Distributed_parameter_systems" class="mw-redirect" title="Distributed parameter systems">distributed parameter systems</a> the vectors may be infinite-<a href="Dimension_(vector_space)" title="Dimension (vector space)">dimensional</a> (typically functions).
</p>
<p>If we assume the controller <i>C</i>, the plant <i>P</i>, and the sensor <i>F</i> are <a href="Linear" class="mw-redirect" title="Linear">linear</a> and <a href="Time-invariant" class="mw-redirect" title="Time-invariant">time-invariant</a> (i.e., elements of their <a href="Transfer_function" title="Transfer function">transfer function</a> <i>C</i>(<i>s</i>), <i>P</i>(<i>s</i>), and <i>F</i>(<i>s</i>) do not depend on time), the systems above can be analysed using the <a href="Laplace_transform" title="Laplace transform">Laplace transform</a> on the variables. This gives the following relations:
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle Y(s)=P(s)U(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>Y</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>U</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle Y(s)=P(s)U(s)}</annotation>
</semantics>
</math></span><img src="./a017597b49ed2396ca6b2dd6685c5b67091bee0c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:17.099ex; height:2.843ex;" alt="{\displaystyle Y(s)=P(s)U(s)}" loading="lazy"></span></dd>
<dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle U(s)=C(s)E(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>U</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>E</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle U(s)=C(s)E(s)}</annotation>
</semantics>
</math></span><img src="./1b6f7688193f812a5fa3c3609c3d250529044993.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:17.122ex; height:2.843ex;" alt="{\displaystyle U(s)=C(s)E(s)}" loading="lazy"></span></dd>
<dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle E(s)=R(s)-F(s)Y(s).}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>E</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>R</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>Y</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>.</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle E(s)=R(s)-F(s)Y(s).}</annotation>
</semantics>
</math></span><img src="./a787e2eecc1f81323f15d20384ddf2ad2c419032.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.238ex; height:2.843ex;" alt="{\displaystyle E(s)=R(s)-F(s)Y(s).}" loading="lazy"></span></dd></dl>
<p>Solving for <i>Y</i>(<i>s</i>) in terms of <i>R</i>(<i>s</i>) gives
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle Y(s)=\left({\frac {P(s)C(s)}{1+P(s)C(s)F(s)}}\right)R(s)=H(s)R(s).}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>Y</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow>
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mrow>
</mfrac>
</mrow>
<mo>)</mo>
</mrow>
<mi>R</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>H</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>R</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>.</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle Y(s)=\left({\frac {P(s)C(s)}{1+P(s)C(s)F(s)}}\right)R(s)=H(s)R(s).}</annotation>
</semantics>
</math></span><img src="./2ded87a715d1d1b77ddcf2cb4bd88997f540f9d1.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.671ex; width:48.407ex; height:6.509ex;" alt="{\displaystyle Y(s)=\left({\frac {P(s)C(s)}{1+P(s)C(s)F(s)}}\right)R(s)=H(s)R(s).}" loading="lazy"></span></dd></dl>
<p>The expression <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle H(s)={\frac {P(s)C(s)}{1+F(s)P(s)C(s)}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>H</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow>
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mrow>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle H(s)={\frac {P(s)C(s)}{1+F(s)P(s)C(s)}}}</annotation>
</semantics>
</math></span><img src="./f2490516044765db8e04dcd227c81a27716c5d00.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.671ex; width:26.853ex; height:6.509ex;" alt="{\displaystyle H(s)={\frac {P(s)C(s)}{1+F(s)P(s)C(s)}}}" loading="lazy"></span> is referred to as the <i>closed-loop transfer function</i> of the system. The numerator is the forward (open-loop) gain from <i>r</i> to <i>y</i>, and the denominator is one plus the gain in going around the feedback loop, the so-called loop gain. If <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle |P(s)C(s)|\gg 1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo>≫<!-- ≫ --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle |P(s)C(s)|\gg 1}</annotation>
</semantics>
</math></span><img src="./2731f366bed2c595293672f798a869f770fbff2a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:15.381ex; height:2.843ex;" alt="{\displaystyle |P(s)C(s)|\gg 1}" loading="lazy"></span>, i.e., it has a large <a href="Norm_(mathematics)" title="Norm (mathematics)">norm</a> with each value of <i>s</i>, and if <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle |F(s)|\approx 1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo>≈<!-- ≈ --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle |F(s)|\approx 1}</annotation>
</semantics>
</math></span><img src="./37beeed5677b9485b73900c76cb56f10a68bc3af.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.195ex; height:2.843ex;" alt="{\displaystyle |F(s)|\approx 1}" loading="lazy"></span>, then <i>Y</i>(<i>s</i>) is approximately equal to <i>R</i>(<i>s</i>) and the output closely tracks the reference input.
</p>
<div class="mw-heading mw-heading2"><h2 id="PID_feedback_control">PID feedback control</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="PID_controller" class="mw-redirect" title="PID controller">PID controller</a></div>
<p>A proportional–integral–derivative controller (PID controller) is a <a href="Control_loop" title="Control loop">control loop</a> <a href="Feedback_mechanism" class="mw-redirect" title="Feedback mechanism">feedback mechanism</a> control technique widely used in control systems.
</p><p>A PID controller continuously calculates an <i>error value</i> <span class="texhtml"><i>e</i>(<i>t</i>)</span> as the difference between a desired <a href="Setpoint_(control_system)" title="Setpoint (control system)">setpoint</a> and a measured <a href="Process_variable" title="Process variable">process variable</a> and applies a correction based on <a href="Proportional_control" title="Proportional control">proportional</a>, <a href="Integral" title="Integral">integral</a>, and <a href="Derivative" title="Derivative">derivative</a> terms. <i>PID</i> is an initialism for <i>Proportional-Integral-Derivative</i>, referring to the three terms operating on the error signal to produce a control signal.
</p><p>The theoretical understanding and application dates from the 1920s, and they are implemented in nearly all analogue control systems; originally in mechanical controllers, and then using discrete electronics and later in industrial process computers.
The PID controller is probably the most-used feedback control design.
</p><p>If <span class="texhtml"><i>u</i>(<i>t</i>)</span> is the control signal sent to the system, <span class="texhtml"><i>y</i>(<i>t</i>)</span> is the measured output and <span class="texhtml"><i>r</i>(<i>t</i>)</span> is the desired output, and <span class="texhtml"><i>e</i>(<i>t</i>) = <i>r</i>(<i>t</i>) − <i>y</i>(<i>t</i>)</span> is the tracking error, a PID controller has the general form
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle u(t)=K_{P}e(t)+K_{I}\int ^{t}e(\tau ){\text{d}}\tau +K_{D}{\frac {{\text{d}}e(t)}{{\text{d}}t}}.}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
<msup>
<mo>∫<!-- ∫ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>t</mi>
</mrow>
</msup>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>τ<!-- τ --></mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>d</mtext>
</mrow>
<mi>τ<!-- τ --></mi>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mtext>d</mtext>
</mrow>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mtext>d</mtext>
</mrow>
<mi>t</mi>
</mrow>
</mfrac>
</mrow>
<mo>.</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle u(t)=K_{P}e(t)+K_{I}\int ^{t}e(\tau ){\text{d}}\tau +K_{D}{\frac {{\text{d}}e(t)}{{\text{d}}t}}.}</annotation>
</semantics>
</math></span><img src="./a70350ae24e2b591fe820a70a79ea021d70c8800.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.338ex; width:43.691ex; height:6.176ex;" alt="{\displaystyle u(t)=K_{P}e(t)+K_{I}\int ^{t}e(\tau ){\text{d}}\tau +K_{D}{\frac {{\text{d}}e(t)}{{\text{d}}t}}.}" loading="lazy"></span></dd></dl>
<p>The desired closed loop dynamics is obtained by adjusting the three parameters <span class="texhtml"><i>K<sub>P</sub></i></span>, <span class="texhtml"><i>K<sub>I</sub></i></span> and <span class="texhtml"><i>K<sub>D</sub></i></span>, often iteratively by "tuning" and without specific knowledge of a plant model. Stability can often be ensured using only the proportional term. The integral term permits the rejection of a step disturbance (often a striking specification in <a href="Process_control" class="mw-redirect" title="Process control">process control</a>). The derivative term is used to provide damping or shaping of the response. PID controllers are the most well-established class of control systems: however, they cannot be used in several more complicated cases, especially if <a href="MIMO" title="MIMO">MIMO</a> systems are considered.
</p><p>Applying <a href="Laplace_transform" title="Laplace transform">Laplace transformation</a> results in the transformed PID controller equation
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle u(s)=K_{P}\,e(s)+K_{I}\,{\frac {1}{s}}\,e(s)+K_{D}\,s\,e(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>s</mi>
</mfrac>
</mrow>
<mspace width="thinmathspace"></mspace>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mi>s</mi>
<mspace width="thinmathspace"></mspace>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle u(s)=K_{P}\,e(s)+K_{I}\,{\frac {1}{s}}\,e(s)+K_{D}\,s\,e(s)}</annotation>
</semantics>
</math></span><img src="./d2e66877eb5e7242582e1481e46c729a02b08c8a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:40.022ex; height:5.176ex;" alt="{\displaystyle u(s)=K_{P}\,e(s)+K_{I}\,{\frac {1}{s}}\,e(s)+K_{D}\,s\,e(s)}" loading="lazy"></span></dd>
<dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle u(s)=\left(K_{P}+K_{I}\,{\frac {1}{s}}+K_{D}\,s\right)e(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>s</mi>
</mfrac>
</mrow>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mi>s</mi>
</mrow>
<mo>)</mo>
</mrow>
<mi>e</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle u(s)=\left(K_{P}+K_{I}\,{\frac {1}{s}}+K_{D}\,s\right)e(s)}</annotation>
</semantics>
</math></span><img src="./a0299521032d9508677b8d0e855a214adfb08231.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:34.703ex; height:6.176ex;" alt="{\displaystyle u(s)=\left(K_{P}+K_{I}\,{\frac {1}{s}}+K_{D}\,s\right)e(s)}" loading="lazy"></span></dd></dl>
<p>with the PID controller transfer function
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle C(s)=\left(K_{P}+K_{I}\,{\frac {1}{s}}+K_{D}\,s\right).}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>s</mi>
</mfrac>
</mrow>
<mo>+</mo>
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<mspace width="thinmathspace"></mspace>
<mi>s</mi>
</mrow>
<mo>)</mo>
</mrow>
<mo>.</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle C(s)=\left(K_{P}+K_{I}\,{\frac {1}{s}}+K_{D}\,s\right).}</annotation>
</semantics>
</math></span><img src="./2d08c8a2d3710bbbe43f1504eed9a61519284e4f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:31.803ex; height:6.176ex;" alt="{\displaystyle C(s)=\left(K_{P}+K_{I}\,{\frac {1}{s}}+K_{D}\,s\right).}" loading="lazy"></span></dd></dl>
<p>As an example of tuning a PID controller in the closed-loop system <span class="texhtml"><i>H</i>(<i>s</i>)</span>, consider a 1st order plant given by
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle P(s)={\frac {A}{1+sT_{P}}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>P</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mi>A</mi>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>s</mi>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
</mrow>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle P(s)={\frac {A}{1+sT_{P}}}}</annotation>
</semantics>
</math></span><img src="./971eedbf43e9b4ae951eecf88a2d0363d427a80e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.171ex; width:16.497ex; height:5.676ex;" alt="{\displaystyle P(s)={\frac {A}{1+sT_{P}}}}" loading="lazy"></span></dd></dl>
<p>where <span class="texhtml mvar" style="font-style:italic;">A</span> and <span class="texhtml"><i>T<sub>P</sub></i></span> are some constants. The plant output is fed back through
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle F(s)={\frac {1}{1+sT_{F}}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mi>s</mi>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>F</mi>
</mrow>
</msub>
</mrow>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle F(s)={\frac {1}{1+sT_{F}}}}</annotation>
</semantics>
</math></span><img src="./4b7ee165b5becac24c5ba7e6b79cafe41b42d1a3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.171ex; width:16.489ex; height:5.509ex;" alt="{\displaystyle F(s)={\frac {1}{1+sT_{F}}}}" loading="lazy"></span></dd></dl>
<p>where <span class="texhtml"><i>T<sub>F</sub></i></span> is also a constant. Now if we set <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K_{P}=K\left(1+{\frac {T_{D}}{T_{I}}}\right)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
<mo>=</mo>
<mi>K</mi>
<mrow>
<mo>(</mo>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
</mfrac>
</mrow>
</mrow>
<mo>)</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K_{P}=K\left(1+{\frac {T_{D}}{T_{I}}}\right)}</annotation>
</semantics>
</math></span><img src="./a9a4507c23017bc3b4a418604e0532deef298632.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:20.202ex; height:6.176ex;" alt="{\displaystyle K_{P}=K\left(1+{\frac {T_{D}}{T_{I}}}\right)}" loading="lazy"></span>, <span class="texhtml"><i>K<sub>D</sub></i> = <i>KT<sub>D</sub></i></span>, and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K_{I}={\frac {K}{T_{I}}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>K</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mi>K</mi>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K_{I}={\frac {K}{T_{I}}}}</annotation>
</semantics>
</math></span><img src="./ae35c621895197d1b4326d9a78cc15614a349317.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.171ex; width:9.387ex; height:5.509ex;" alt="{\displaystyle K_{I}={\frac {K}{T_{I}}}}" loading="lazy"></span>, we can express the PID controller transfer function in series form as
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle C(s)=K\left(1+{\frac {1}{sT_{I}}}\right)(1+sT_{D})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>C</mi>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>K</mi>
<mrow>
<mo>(</mo>
<mrow>
<mn>1</mn>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mrow>
<mi>s</mi>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
</mrow>
</mfrac>
</mrow>
</mrow>
<mo>)</mo>
</mrow>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>+</mo>
<mi>s</mi>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle C(s)=K\left(1+{\frac {1}{sT_{I}}}\right)(1+sT_{D})}</annotation>
</semantics>
</math></span><img src="./2fa1f945339571ff1e8fbb4ae781e00906b361b1.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:32.227ex; height:6.176ex;" alt="{\displaystyle C(s)=K\left(1+{\frac {1}{sT_{I}}}\right)(1+sT_{D})}" loading="lazy"></span></dd></dl>
<p>Plugging <span class="texhtml"><i>P</i>(<i>s</i>)</span>, <span class="texhtml"><i>F</i>(<i>s</i>)</span>, and <span class="texhtml"><i>C</i>(<i>s</i>)</span> into the closed-loop transfer function <span class="texhtml"><i>H</i>(<i>s</i>)</span>, we find that by setting
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K={\frac {1}{A}},T_{I}=T_{F},T_{D}=T_{P}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>A</mi>
</mfrac>
</mrow>
<mo>,</mo>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>I</mi>
</mrow>
</msub>
<mo>=</mo>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>F</mi>
</mrow>
</msub>
<mo>,</mo>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>D</mi>
</mrow>
</msub>
<mo>=</mo>
<msub>
<mi>T</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>P</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K={\frac {1}{A}},T_{I}=T_{F},T_{D}=T_{P}}</annotation>
</semantics>
</math></span><img src="./601cadb75337fbd250b242c078d4d9a106751e4c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.005ex; width:27.022ex; height:5.343ex;" alt="{\displaystyle K={\frac {1}{A}},T_{I}=T_{F},T_{D}=T_{P}}" loading="lazy"></span></dd></dl>
<p><span class="texhtml"><i>H</i>(<i>s</i>) = 1</span>. With this tuning in this example, the system output follows the reference input exactly.
</p><p>However, in practice, a pure differentiator is neither physically realizable nor desirable<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> due to amplification of noise and resonant modes in the system. Therefore, a <a href="Lead%E2%80%93lag_compensator" title="Lead–lag compensator">phase-lead compensator</a> type approach or a differentiator with low-pass roll-off are used instead.
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFBechhoefer2005" class="citation journal cs1">Bechhoefer, John (2005-08-31). <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="https://link.aps.org/doi/10.1103/RevModPhys.77.783">"Feedback for physicists: A tutorial essay on control"</a></span>. <i>Reviews of Modern Physics</i>. <b>77</b> (3): <span class="nowrap">783–</span>836. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1103%2FRevModPhys.77.783">10.1103/RevModPhys.77.783</a>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFCaoFeito2009" class="citation journal cs1">Cao, F. J.; Feito, M. (2009-04-10). <a rel="nofollow" class="external text" href="https://link.aps.org/doi/10.1103/PhysRevE.79.041118">"Thermodynamics of feedback controlled systems"</a>. <i>Physical Review E</i>. <b>79</b> (4): 041118. <a href="ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/0805.4824">0805.4824</a></span>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1103%2FPhysRevE.79.041118">10.1103/PhysRevE.79.041118</a>.</cite></span>
</li>
<li id="cite_note-Control_loop_auto-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-Control_loop_auto_3-0">^</a></b></span> <span class="reference-text">"Feedback and control systems" - JJ Di Steffano, AR Stubberud, IJ Williams. Schaums outline series, McGraw-Hill 1967</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFMayr1970" class="citation book cs1"><a href="Otto_Mayr" title="Otto Mayr">Mayr, Otto</a> (1970). <i>The Origins of Feedback Control</i>. Clinton, MA US: The Colonial Press, Inc.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFMayr1969" class="citation book cs1"><a href="Otto_Mayr" title="Otto Mayr">Mayr, Otto</a> (1969). <i>The Origins of Feedback Control</i>. Clinton, MA US: The Colonial Press, Inc.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFAngChongLi2005" class="citation journal cs1">Ang, K.H.; Chong, G.C.Y.; Li, Y. (2005). <a rel="nofollow" class="external text" href="http://eprints.gla.ac.uk/3817/1/IEEE3.pdf">"PID control system analysis, design, and technology"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Transactions on Control Systems Technology</i>. <b>13</b> (4): <span class="nowrap">559–</span>576. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTCST.2005.847331">10.1109/TCST.2005.847331</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:921620">921620</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20131213200556/http://eprints.gla.ac.uk/3817/1/IEEE3.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2013-12-13.</cite></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-24" href="https://en.wikipedia.org/wiki/?title=Closed-loop_controller&oldid=1302267658">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>